#!/bin/bash

host_password="ht"

# 如果指定了密码，则使用指定的密码，否则使用默认密码
if [[ "$1" != "" ]]; then
    host_password=$1
fi

current_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 定义自启动路径的变量
auto_start_path=$HOME/AutoStart

# 如果 ${auto_start_path} 目录不存在，则创建
if [ ! -d "$auto_start_path" ]; then
    mkdir -p "$auto_start_path"
fi

# 创建自启动的.desktop文件
# 如果文件不存在，则创建，如果目录不存在，则创建
if [ ! -d "$HOME/.config/autostart" ]; then
    mkdir -p "$HOME/.config/autostart"
fi

if [ ! -f "$HOME/.config/autostart/rs_auto_start.desktop" ]; then
    cat >$HOME/.config/autostart/rs_auto_start.desktop <<EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Categories=true
Version=1.0
Name=rs_auto_start
Exec=$HOME/.config/autostart/rs_auto_start.sh #注意这里是绝对路径
Path=$HOME
Terminal=false # 是否保留终端
StartupNotify=true # 开机自启动

EOF
fi

# 创建自启动的脚本文件
if [ ! -f "$auto_start_path/sys_log_01.sh" ]; then
    cat >$auto_start_path/sys_log_01.sh <<EOF
#!/bin/bash

# 定义限制行数的变量
limit_line=2000

# 记录脚本运行的时间
mkdir -p \$HOME/.rs_auto_start_log
echo "system auto start time: \$(date)" >> \$HOME/.rs_auto_start_log/rs_auto_start.log

# 如果脚本记录的行数超过 \$limit_line 行，则删除行数的一半

# 计算limit_line的一半
half_limit_line=\$((\$limit_line / 2))

# 计算当前日志文件的行数
line_count=\$(wc -l \$HOME/.rs_auto_start_log/rs_auto_start.log | awk '{print \$1}')

# 如果当前日志文件的行数大于限制行数，则删除前面的一半行
if [[ \$line_count -gt \$limit_line ]]; then
    sed -i "1,\$((\$line_count - \$half_limit_line))d" \$HOME/.rs_auto_start_log/rs_auto_start.log
fi

EOF
fi

# 如果自动启动脚本不存在，则生成
if [[ ! -f "$HOME/.config/autostart/rs_auto_start.sh" ]]; then

    # 生成自动启动脚本
    cat <<EOF >"$HOME/.config/autostart/rs_auto_start.sh"
#!/bin/bash

password="$host_password"

# 加载依赖库
echo "\$password" | sudo -S ldconfig

# 1. 定义一个字典，用于存储有数字序号的文件路径列表
declare -A numbered_files_dict

# 2. 定义一个字典，用于存储普通无数字序号的文件路径列表
declare -A no_number_files_dict

# 3. 定义自启动路径的变量
auto_start_path=\$HOME/AutoStart

# 4. 获取\${auto_start_path}目录下的所有.sh/.py文件
files=\$(ls \${auto_start_path}/*.sh \${auto_start_path}/*.py 2>/dev/null)

# 5. 遍历文件，提取文件名中的数字编号，数字编号格式 xxx_01.sh
for file in \${files}; do
    number=\$(basename -- "\$file" | sed 's/[^0-9]*//g')
    if [[ -n \$number ]]; then
        # 如果数字已经存在于字典中，则将文件路径添加到列表中
        if [[ \${numbered_files_dict[\${number}]+_} ]]; then
            numbered_files_dict[\${number}]="\${numbered_files_dict[\${number}]} \$file"
        else
            numbered_files_dict[\${number}]=\$file
        fi
    else
        # 如果文件名中没有数字，则将文件路径存储在 no_num 键下
        filename=\$(basename -- "\$file")
        no_number_files_dict["no_num_\$filename"]=\$file
    fi
done

# 6. 获取字典 numbered_files_dict 的所有key，并对key进行数字排序，有数字在最前面，无数字的key在最后面
numbered_keys=(\$(echo "\${!numbered_files_dict[@]}" | tr ' ' '\n' | sort -n))

# 7. 遍历有数字序号的文件列表并依次启动
for key in \${numbered_keys[@]}; do
    file_path=\${numbered_files_dict[\$key]}
    # 如果文件列表不为空，则按顺序启动文件
    if [[ \$file_path =~ " " ]]; then

        echo "Starting \${key} files..."
        for file in \${file_path}; do
            
            # 判断文件是否有执行权限，如果没有，则赋予执行权限
            if [[ ! -x "\$file" ]]; then
                chmod +x "\$file"
            fi

            echo "Starting \${file}..."
            \${file}
        done
    else
        echo "Starting \${file_path}..."
        # 判断文件是否有执行权限，如果没有，则赋予执行权限
        if [[ ! -x "\$file_path" ]]; then
            chmod +x "\$file_path"
        fi
        \${file_path}
    fi
done

# 8. 获取字典 no_number_files_dict 的所有key，并对key进行排序
# no_number_keys=(\$(echo "\${!no_number_files_dict[@]}" | tr ' ' '\n' | sort))

# 9. 遍历普通无数字序号的文件列表并依次启动
# for key in \${no_number_keys[@]}; do
#     file_path=\${no_number_files_dict[\$key]}
#
#    # 判断文件是否有执行权限，如果没有，则赋予执行权限
#    if [[ ! -x "\$file_path" ]]; then
#        chmod +x "\$file_path"
#    fi
#    
#     echo "Starting \${file_path}..."
#     \${file_path}
# done

echo "All auto start files have been started ..."

EOF

fi


# 赋予脚本可执行权限
chmod +x $auto_start_path/sys_log_01.sh
chmod +x $HOME/.config/autostart/rs_auto_start.sh
chmod +x $HOME/.config/autostart/rs_auto_start.desktop
